Page({
    onShareAppMessage() {
        return {
            title: '专业简历制作工具 - 海量模板任你选',
            path: '/pages/index/index',
            imageUrl: 'https://qzruocheng.oss-cn-beijing.aliyuncs.com/resume_assets/assets/icons/logo.png'
        }
    },

    data: {
        // 分类标签数据
        categories: [
            { id: 1, name: '热门推荐', active: true },
            { id: 2, name: '最新上线', active: false },
            { id: 3, name: '行业精选', active: false }
        ],
        // 模板数据
        templates: [
            // 数据结构示例:
            // { 
            //   id: '模板唯一ID', 
            //   title: '模板名称',
            //   imgPreview: '预览图URL',
            //   documentUrl: '文档URL' 
            // }
        ],
        // 分页数据
        pageInfo: {
            currentPage: 1,
            pageSize: 12,
            hasMore: true
        },
        loading: false,
        isLoading: false,// 分类切换时的加载状态
        hasTab: true, // 是否显示分类

    },

    onLoad(options) {
        if (options.keyword) {
            const keyword = decodeURIComponent(options.keyword);
            wx.setNavigationBarTitle({
                title: `搜索: ${keyword}相关模板`
            });
            this.setData({
                hasTab: false
            });
            this.handleKeywordSearch(keyword);

        } else {
            wx.setNavigationBarTitle({
                title: '推荐模板'
            });
            this.setData({
                hasTab: true
            });
            this.loadTemplates(false);
        }
    },

    // 处理关键词搜索
    handleKeywordSearch(keyword) {
        wx.showLoading({
            title: '搜索中...'
        });

        wx.cloud.callFunction({
            name: 'SearchAllBaseTemplate',
            data: {
                searchText: keyword
            },
            success: res => {
                wx.hideLoading();
                console.log('搜索成功', res.result);
                this.setData({
                    templates: (res.result.data || []).filter(item => item.enable !== false)
                });
            },
            fail: err => {
                wx.hideLoading();
                console.error('搜索失败', err);
                wx.showToast({
                    title: '搜索失败',
                    icon: 'none'
                });
            }
        });
    },

    // 加载模板数据
    loadTemplates(status) {
        if (this.data.loading || !this.data.pageInfo.hasMore || !this.data.hasTab) return;

        this.setData({
            loading: true,
            isLoading: true
        });

        const currentCategory = this.data.categories.find(c => c.active);
        let cloudFunctionName = 'getResumeTemplates';
        let params = {};


        // 热门推荐使用分页查询
        if (currentCategory.id === 1) {
            params = {
                currentPage: status ? this.data.pageInfo.currentPage++ : this.data.pageInfo.currentPage,
                pageSize: this.data.pageInfo.pageSize
            };
        }


        wx.cloud.callFunction({
            name: cloudFunctionName,
            data: params
        }).then(res => {
            if (res.result.code === 0) {
                const { templates, pageInfo } = res.result.data;
                this.setData({
                    templates: [...this.data.templates, ...templates].filter(item => item.enable !== false),
                    'pageInfo.currentPage': status ? this.data.pageInfo.currentPage++ : this.data.pageInfo.currentPage,
                    'pageInfo.hasMore': pageInfo.hasMore,
                    loading: false,
                    isLoading: false
                });
            } else {
                console.error('获取模板失败:', res.result.message);
                this.setData({
                    loading: false,
                    isLoading: false
                });
            }
        }).catch(err => {
            console.error('调用云函数失败:', err);
            this.setData({
                loading: false,
                isLoading: false
            });
        });
    },
    //  加载最新上线数据
    getLatestTemplates(fnName) {
        this.setData({ isLoading: true });

        const params = {
            limit: 20 // 固定获取20条随机数据
        };
        // 随机分类不分页
        this.setData({
            'pageInfo.hasMore': false
        });

        wx.cloud.callFunction({
            name: fnName,
            data: params
        }).then(res => {
            if (res.result.code === 0) {
                const { templates } = res.result.data;
                this.setData({
                    templates: [...this.data.templates, ...templates].filter(item => item.enable !== false),
                    loading: false,
                    isLoading: false
                });
            } else {
                console.error('获取模板失败:', res.result.message);
                this.setData({
                    loading: false,
                    isLoading: false
                });
            }
        }).catch(err => {
            console.error('调用云函数失败:', err);
            this.setData({
                loading: false,
                isLoading: false
            });
        });
    },
    //  获取行业精选数据
    getIndustryData(fnName) {   // 随机分类不分页
        this.setData({
            'pageInfo.hasMore': false,
            isLoading: true
        });

        wx.cloud.callFunction({
            name: fnName,
        }).then(res => {
            console.log('获取行业精选数据', res);

            if (res.result.code === 0) {
                const templates = res.result.data;
                this.setData({
                    templates: [...this.data.templates, ...templates].filter(item => item.enable !== false),
                    loading: false,
                    isLoading: false
                });
            } else {
                console.error('获取模板失败:', res.result.message);
                this.setData({
                    loading: false,
                    isLoading: false
                });
            }
        }).catch(err => {
            console.error('调用云函数失败:', err);
            this.setData({
                loading: false,
                isLoading: false
            });
        });
    },
    // 切换分类
    switchCategory(e) {
        const { id } = e.currentTarget.dataset;
        const categories = this.data.categories.map(item => ({
            ...item,
            active: item.id === id
        }));

        this.setData({
            categories,
            templates: [],
            'pageInfo.currentPage': 1,
            'pageInfo.hasMore': true,
            isLoading: true
        }, () => {
            switch (id) {
                case 1:
                    this.loadTemplates(false);
                    break;
                case 2:
                    wx.setNavigationBarTitle({
                        title: '最新上线'
                    });
                    this.getLatestTemplates('getRandomTemplates');
                    break;
                case 3:
                    wx.setNavigationBarTitle({
                        title: '行业精选'
                    });
                    this.getIndustryData('getAllIndustryDataTemplate');
                    break;
            }
        });
    },

    // 返回上一页
    goBack() {
        wx.navigateBack();
    },

    // 加载更多
    onReachBottom() {
        this.loadTemplates(true);
    },

    // 预览图片
    previewImage(e) {
        const { url } = e.currentTarget.dataset;
        const urls = [url];
        wx.previewImage({
            current: url,
            urls: urls
        });
    },

    // 复制模板链接
    copyTemplateLink(e) {
        const { index } = e.currentTarget.dataset;
        const template = this.data.templates[index];

        wx.showActionSheet({
            itemList: ['复制PDF简历模板链接', '复制Word简历模板链接'],
            success(res) {
                const fileType = res.tapIndex === 0 ? 'pdf' : 'word'
                const fileID = fileType === 'pdf'
                    ? template.fileidPdf
                    : template.fileid

                if (!fileID) {
                    wx.showToast({
                        title: '模板文件不存在',
                        icon: 'none'
                    })
                    return
                }

                wx.showLoading({
                    title: '获取下载链接中...',
                    mask: true
                })

                wx.cloud.callFunction({
                    name: 'getResumeUrl',
                    data: { fileID },
                    success(res) {
                        if (res.result.code === 0) {
                            const url = res.result.data.url
                            wx.setClipboardData({
                                data: url,
                                success: () => {
                                    wx.showModal({
                                        title: '复制成功',
                                        content: `下载链接已复制到剪贴板\n\n链接2分钟后失效，请及时下载\n\n文件名: ${template.title}.${fileType}`,
                                        showCancel: false,
                                        confirmText: '知道了'
                                    })
                                },
                                fail: (err) => {
                                    wx.showToast({
                                        title: '复制失败: ' + (err.errMsg || '未知错误'),
                                        icon: 'none'
                                    })
                                }
                            })
                        } else {
                            wx.showToast({
                                title: res.result.message || '获取下载链接失败',
                                icon: 'none'
                            })
                        }
                    },
                    fail(err) {
                        wx.showToast({
                            title: '获取下载链接失败',
                            icon: 'none'
                        })
                        console.error(err)
                    },
                    complete() {
                        wx.hideLoading()
                    }
                })
            },
            fail(res) {
                console.log(res.errMsg)
            }
        })
    },

    // 跳转到模板详情页
    goToTemplateDetail(e) {
        try {
            const { index } = e.currentTarget.dataset;
            const template = this.data.templates[index];
            const fileidPdf = template.fileidPdf
            console.log('templateId:', template);

            if (!template) {
                throw new Error('模板数据不存在');
            }


            if (!fileidPdf) {
                throw new Error('模板ID不存在');
            }

            console.log('正在跳转到模板详情页，模板ID:', fileidPdf);
            this.openDocument(fileidPdf);

        } catch (err) {
            console.error('跳转出错:', err);
            wx.showToast({
                title: err.message || '跳转出错',
                icon: 'none'
            });
        }
    },

    // 打开文档
    openDocument(fileidPdf) {
        this.setData({ loading: true, error: false, errorMsg: '' });

        if (!fileidPdf) {
            this.handleError('缺少模板ID参数');
            return;
        }

        // 显示文档转换提示
        wx.showLoading({
            title: '文档转换中',
            mask: true
        });
        this.getTempFileURL(fileidPdf)
        // 调用云函数获取模板数据
        // wx.cloud.callFunction({
        //     name: 'getTemplateById',
        //     data: { templateId }
        // }).then(res => {
        //     if (res.result.code !== 0) {
        //         wx.hideLoading();
        //         throw new Error(res.result.message || '获取模板数据失败');
        //     }

        //     const templateData = res.result.data;

        //     if (!templateData) {
        //         wx.hideLoading();
        //         throw new Error('未找到该模板');
        //     }
        //     console.log('模板数据:', templateData.template);
        //     console.log('云存储fileid:', templateData.fileid);

        //     this.getTempFileURL(templateData.fileidPdf)

        // })

    },


    // 获取临时文件链接, 并打开文件
    getTempFileURL(fileidPdf) {
        if (!fileidPdf) {
            wx.hideLoading();
            console.error('缺少文件fileidPdf');
            return;
        }

        // 获取临时文件链接
        wx.cloud.getTempFileURL({
            fileList: [fileidPdf]
        }).then(res => {
            const fileInfo = res.fileList[0];
            if (fileInfo.tempFileURL) {
                const tempFileURL = fileInfo.tempFileURL;

                // 下载文件并打开
                wx.downloadFile({
                    url: tempFileURL,
                    success: function (res) {
                        const filePath = res.tempFilePath;
                        if (filePath) {
                            wx.openDocument({
                                filePath: filePath,
                                fileType: 'pdf',
                                success: function (res) {
                                    wx.hideLoading();
                                    console.log('打开文档成功');
                                },
                                fail: function (err) {
                                    wx.hideLoading();
                                    console.error('打开文档失败', err);
                                }
                            });
                        } else {
                            wx.hideLoading();
                            console.error('文件路径无效');
                        }
                    },
                    fail: function (err) {
                        wx.hideLoading();
                        console.error('下载失败', err);
                    }
                });
            } else {
                wx.hideLoading();
                console.error('获取临时链接失败', fileInfo);
            }
        }).catch(err => {
            wx.hideLoading();
            console.error('获取临时文件链接失败:', err);
        });


    },

    // 根据URL获取文件类型
    getFileType(url) {
        wx.showLoading({
            title: url,
        })

        setTimeout(function () {
            wx.hideLoading()
        }, 2000)

        if (!url) return 'pdf';
        const ext = url.split('.').pop().toLowerCase();
        switch (ext) {
            case 'doc':
            case 'docx':
                return 'docx';
            case 'xls':
            case 'xlsx':
                return 'xlsx';
            case 'ppt':
            case 'pptx':
                return 'pptx';
            default:
                return 'pdf';
        }
    },

});